package com.ruoyi.web.controller.admin;

import com.ruoyi.business.domain.entity.UserInfo;
import com.ruoyi.business.service.user.IUserInfoService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

/*
* 用户列表
* */
@RestController
@RequestMapping("/admin/user")
public class UserInfoController extends BaseController {
    @Resource
    private IUserInfoService iUserInfoService;
    /*
    * 查询用户列表
    *  @PreAuthorize("@ss.hasAnyPermi('business:user:list')")权限控制
    * */

    @GetMapping("/list")
    public TableDataInfo list(UserInfo userInfo){
        startPage();
//        userInfo.setUserType("0");
        List<UserInfo> list = iUserInfoService.selectUserList(userInfo);
        return getDataTable(list);
    }
    /*
    * 新增用户
    * */
    @Log(title = "用户列表",businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@RequestBody UserInfo userInfo){
        userInfo.setUserType("0");
        return toAjax(iUserInfoService.insertUserInfo(userInfo));
    }
    /*
    * 修改用户
    * */
    @Log(title = "修改用户列表",businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@RequestBody UserInfo userInfo){
        // 验证ID不能为空
        if (userInfo.getUserId() == null) {
            return AjaxResult.error("用户ID不能为空");
        }
        return toAjax(iUserInfoService.updateUserInfo(userInfo));
    }

    /*
    * 删除用户
    * */
    @Log(title = "删除用户列表",businessType = BusinessType.DELETE)
    @DeleteMapping("/{userIds}")
    public AjaxResult remove(@PathVariable String[] userIds){
        return toAjax(iUserInfoService.deleteUserInfoByIds(userIds));
    }

    /*
    * 导出用户列表
    * */
    @Log(title = "导出用户列表",businessType = BusinessType.EXPORT)
    @PostMapping("/export")
    public void export(HttpServletResponse response,UserInfo userInfo){
        List<UserInfo> list =iUserInfoService.selectUserInfoList(userInfo);
        ExcelUtil<UserInfo> util = new ExcelUtil<UserInfo>(UserInfo.class);
        util.exportExcel(response,list,"用户数据列表");
    }

    /*
    * 导入用户列表
    * */
    @Log(title =  "导入用户列表",businessType = BusinessType.IMPORT)
    @PostMapping("/import")
    /**
     * 导入用户列表 Excel
     *
     * - 支持 .xlsx/.xls 文件
     * - 同步阶段完成文件基本校验与解析入参准备，随后交由服务层异步处理导入
     *
     * @param file       Excel 文件（表名需为“用户基本信息表”）
     * @param taskSource 任务来源（默认：Excel导入）
     * @return 处理结果与导入记录 id（异步任务标识）
     */
    public AjaxResult importUserInfoExcel(@RequestParam("file")MultipartFile file,
                                          @RequestParam(value = "taskSource",defaultValue = "Excel导入") String taskSource)
    {
        try {
            if (file.isEmpty()){
                return AjaxResult.error("上传文件不能为空");
            }
//            检查文件类型
            String fileName = file.getOriginalFilename();
            if (fileName == null || (!fileName.endsWith(".xlsx")&& !fileName.endsWith(".xls"))){
                return AjaxResult.error("上传Excel文件(.xlsx或.xls文件)");
            }
            String userName = getUsername();
            Long recordId = iUserInfoService.importUserInfoFromExcel(file,taskSource,fileName,userName);
            return AjaxResult.success("用户导入任务已提交，记录id:"+recordId);
        }catch (Exception e){
            return AjaxResult.error("用户导入失败"+e.getMessage());
        }
    }


}
